var Calendar = function () {
    return {
        //main function to initiate the module
        init: function () {
            Calendar.initCalendar();
        },

        initCalendar: function () {

            if (!jQuery().fullCalendar) {
                return;
            }

            var date = new Date();
            var d = date.getDate();
            var m = date.getMonth();
            var y = date.getFullYear();

            var h = {
                left: 'prev,next,today',
                center: 'title',
                right: ''
            };

            var initDrag = function (el) {
                // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
                // it doesn't need to have a start or end
                var eventObject = {
                    title: $.trim(el.text()) // use the element's text as the event title
                };
                // store the Event Object in the DOM element so we can get to it later
                el.data('eventObject', eventObject);
                // make the event draggable using jQuery UI
                el.draggable({
                    zIndex: 999,
                    revert: true, // will cause the event to go back to its
                    revertDuration: 0 //  original position after the drag
                });
            }

            var addEvent = function (title) {
                title = title.length == 0 ? "Untitled Event" : title;
                var html = $('<div class="external-event label label-default">' + title + '</div>');
                jQuery('#event_box').append(html);
                initDrag(html);
            }

            $('#external-events div.external-event').each(function () {
                initDrag($(this));
                $(this).addTouch();
            });

            $('#event_add').unbind('click').click(function () {
                var title = $('#event_title').val();
                var allEvents = $('#calendar').fullCalendar('clientEvents');
                if (allEvents.length > 0)
                {

                }
                else
                {
                    addEvent(title);
                }
            });

            //predefined events
            $('#event_box').html("");
            addEvent("My Holiday Request");

            $('#calendar').fullCalendar('destroy'); // destroy the calendar
            $('#calendar').fullCalendar({ //re-initialize the calendar
                header: h,
                slotMinutes: 15,
                editable: true,
                droppable: true, // this allows things to be dropped onto the calendar !!!
                drop: function (date, allDay) { // this function is called when something is dropped

                    var allEvents = $('#calendar').fullCalendar('clientEvents');
                    if (allEvents.length < 1) {
                        // retrieve the dropped element's stored Event Object
                        var originalEventObject = $(this).data('eventObject');
                        // we need to copy it, so that multiple events don't have a reference to the same object
                        var copiedEventObject = $.extend({}, originalEventObject);

                        // assign it the date that was reported
                        copiedEventObject.title = copiedEventObject.title;
                        copiedEventObject.start = date;
                        copiedEventObject.allDay = allDay;
                        copiedEventObject.className = $(this).attr("data-class");

                        // render the event on the calendar
                        // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
                        $('#calendar').fullCalendar('renderEvent', copiedEventObject, true);

                        // is the "remove after drop" checkbox checked?
                        // if ($('#drop-remove').is(':checked')) {
                        // if so, remove the element from the "Draggable Events" list
                        $(this).remove();
                        //}
                        //alert(allEvents[0].title)
                    }
                       
                    
                },
                eventClick: function (calEvent, jsEvent, view) {
                },
                buttonText: {
                    prev: '<i class="m-icon-swapleft m-icon-white"></i>',
                    next: '<i class="m-icon-swapright m-icon-white"></i>',
                    today: '<i class="icon-calendar"></i> To Day'
                }
            });

        }

    };

}();